<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::net_flow::Sequence_number Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1net__flow.html">net_flow</a></li><li class="navelem"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classflow_1_1net__flow_1_1Sequence__number-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::net_flow::Sequence_number Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>An internal <code><a class="el" href="namespaceflow_1_1net__flow.html" title="Flow module containing the API and implementation of the Flow network protocol, a TCP-inspired stream...">net_flow</a></code> sequence number identifying a piece of data.  
 <a href="classflow_1_1net__flow_1_1Sequence__number.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>&gt;</code></p>
<div class="dynheader">
Collaboration diagram for flow::net_flow::Sequence_number:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number__coll__graph.svg" width="366" height="143"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number_1_1Generator.html">Generator</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">An object of this type generates a series of initial sequence numbers (ISN) that are meant to be sufficiently secure to protect against ISN attacks and confusion among different connections between the same endpoints occurring in series.  <a href="classflow_1_1net__flow_1_1Sequence__number_1_1Generator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:ab307e12c0cf8cefbe7fb1ec8588af2a8"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a> = uint64_t</td></tr>
<tr class="memdesc:ab307e12c0cf8cefbe7fb1ec8588af2a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Raw sequence number type.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">More...</a><br /></td></tr>
<tr class="separator:ab307e12c0cf8cefbe7fb1ec8588af2a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab83e641aa9497115f6dbaf76b92f73c6"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> = int64_t</td></tr>
<tr class="memdesc:ab83e641aa9497115f6dbaf76b92f73c6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Integer type used to express differences (distances) between Sequence_numbers.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">More...</a><br /></td></tr>
<tr class="separator:ab83e641aa9497115f6dbaf76b92f73c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ad86f280e517a60ebbe1edfeac7263d6e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ad86f280e517a60ebbe1edfeac7263d6e">Sequence_number</a> ()</td></tr>
<tr class="memdesc:ad86f280e517a60ebbe1edfeac7263d6e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs sequence number that is zero (not a valid sequence number; less than all others).  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ad86f280e517a60ebbe1edfeac7263d6e">More...</a><br /></td></tr>
<tr class="separator:ad86f280e517a60ebbe1edfeac7263d6e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad42584bd93111318e71d75d2898e0d72"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ad42584bd93111318e71d75d2898e0d72">Sequence_number</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;source)</td></tr>
<tr class="memdesc:ad42584bd93111318e71d75d2898e0d72"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ad42584bd93111318e71d75d2898e0d72">More...</a><br /></td></tr>
<tr class="separator:ad42584bd93111318e71d75d2898e0d72"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad867d849f5c76125dc9ea1abb649c15"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#aad867d849f5c76125dc9ea1abb649c15">operator=</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;source)</td></tr>
<tr class="memdesc:aad867d849f5c76125dc9ea1abb649c15"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy operator.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#aad867d849f5c76125dc9ea1abb649c15">More...</a><br /></td></tr>
<tr class="separator:aad867d849f5c76125dc9ea1abb649c15"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d555c4d74ef4d87f91c8ce51ec47a6b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a1d555c4d74ef4d87f91c8ce51ec47a6b">valid</a> () const</td></tr>
<tr class="memdesc:a1d555c4d74ef4d87f91c8ce51ec47a6b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if and only if <code>*this != <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ad86f280e517a60ebbe1edfeac7263d6e" title="Constructs sequence number that is zero (not a valid sequence number; less than all others).">Sequence_number()</a></code> (i.e., is non-zero).  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a1d555c4d74ef4d87f91c8ce51ec47a6b">More...</a><br /></td></tr>
<tr class="separator:a1d555c4d74ef4d87f91c8ce51ec47a6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3ffb36c06efb99de2c36c69678b51acb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a3ffb36c06efb99de2c36c69678b51acb">operator-</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:a3ffb36c06efb99de2c36c69678b51acb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the distance from <code>*this</code> to <code>rhs</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a3ffb36c06efb99de2c36c69678b51acb">More...</a><br /></td></tr>
<tr class="separator:a3ffb36c06efb99de2c36c69678b51acb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3273e706e3184fd8647d7a8ed77b3a2b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a3273e706e3184fd8647d7a8ed77b3a2b">operator+</a> (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> delta) const</td></tr>
<tr class="memdesc:a3273e706e3184fd8647d7a8ed77b3a2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns new sequence number that is <code>*this</code> advanced (or reversed) by the given distance.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a3273e706e3184fd8647d7a8ed77b3a2b">More...</a><br /></td></tr>
<tr class="separator:a3273e706e3184fd8647d7a8ed77b3a2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fa5305610db905ff775abdf6c148b62"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a0fa5305610db905ff775abdf6c148b62">operator-</a> (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> delta) const</td></tr>
<tr class="memdesc:a0fa5305610db905ff775abdf6c148b62"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <code>operator+(-delta)</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a0fa5305610db905ff775abdf6c148b62">More...</a><br /></td></tr>
<tr class="separator:a0fa5305610db905ff775abdf6c148b62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88c07f9b2c18c962b68a3886e2f005f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a88c07f9b2c18c962b68a3886e2f005f5">operator+=</a> (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> delta)</td></tr>
<tr class="memdesc:a88c07f9b2c18c962b68a3886e2f005f5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Advances (or reverses) this sequence number by the given distance.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a88c07f9b2c18c962b68a3886e2f005f5">More...</a><br /></td></tr>
<tr class="separator:a88c07f9b2c18c962b68a3886e2f005f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab26c0d5ac005a150ec9c31c3d83802c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#aab26c0d5ac005a150ec9c31c3d83802c">operator-=</a> (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> delta)</td></tr>
<tr class="memdesc:aab26c0d5ac005a150ec9c31c3d83802c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to: <code>operator+=(-delta)</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#aab26c0d5ac005a150ec9c31c3d83802c">More...</a><br /></td></tr>
<tr class="separator:aab26c0d5ac005a150ec9c31c3d83802c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a24819702817b8730ec27a39675768d55"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a24819702817b8730ec27a39675768d55">operator==</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:a24819702817b8730ec27a39675768d55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether <code>*this</code> is the same sequence number as <code>rhs</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a24819702817b8730ec27a39675768d55">More...</a><br /></td></tr>
<tr class="separator:a24819702817b8730ec27a39675768d55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4a83d85ed26f8d0e0c81375d5505258"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#af4a83d85ed26f8d0e0c81375d5505258">operator!=</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:af4a83d85ed26f8d0e0c81375d5505258"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return <code>!(*this == rhs)</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#af4a83d85ed26f8d0e0c81375d5505258">More...</a><br /></td></tr>
<tr class="separator:af4a83d85ed26f8d0e0c81375d5505258"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40b55e448b1ef23467e9f33b2c62d01f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a40b55e448b1ef23467e9f33b2c62d01f">operator&lt;</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:a40b55e448b1ef23467e9f33b2c62d01f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether <code>*this</code> is less than <code>rhs</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a40b55e448b1ef23467e9f33b2c62d01f">More...</a><br /></td></tr>
<tr class="separator:a40b55e448b1ef23467e9f33b2c62d01f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae5ee8f6f299fbc5e578bcfd337bf520b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ae5ee8f6f299fbc5e578bcfd337bf520b">operator&gt;</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:ae5ee8f6f299fbc5e578bcfd337bf520b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return <code>rhs &lt; *this</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ae5ee8f6f299fbc5e578bcfd337bf520b">More...</a><br /></td></tr>
<tr class="separator:ae5ee8f6f299fbc5e578bcfd337bf520b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a426ba917e01cba32ddad0d8c245a731b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a426ba917e01cba32ddad0d8c245a731b">operator&lt;=</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:a426ba917e01cba32ddad0d8c245a731b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return <code>!(*this &gt; rhs)</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a426ba917e01cba32ddad0d8c245a731b">More...</a><br /></td></tr>
<tr class="separator:a426ba917e01cba32ddad0d8c245a731b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5b74ff5645f0bf49d0e20773fa5dca7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbool.html">bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#af5b74ff5645f0bf49d0e20773fa5dca7">operator&gt;=</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;rhs) const</td></tr>
<tr class="memdesc:af5b74ff5645f0bf49d0e20773fa5dca7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return <code>rhs &lt;= *this</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#af5b74ff5645f0bf49d0e20773fa5dca7">More...</a><br /></td></tr>
<tr class="separator:af5b74ff5645f0bf49d0e20773fa5dca7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a934068f778e1809e4aff773c7e7d5297"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a934068f778e1809e4aff773c7e7d5297">hash</a> () const</td></tr>
<tr class="memdesc:a934068f778e1809e4aff773c7e7d5297"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash value of this <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> for <code>unordered_*&lt;&gt;</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a934068f778e1809e4aff773c7e7d5297">More...</a><br /></td></tr>
<tr class="separator:a934068f778e1809e4aff773c7e7d5297"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac18fe030885b2ed3dfa290d8eec8c501"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ac18fe030885b2ed3dfa290d8eec8c501">raw_num_ref</a> () const</td></tr>
<tr class="memdesc:ac18fe030885b2ed3dfa290d8eec8c501"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides the raw sequence number.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ac18fe030885b2ed3dfa290d8eec8c501">More...</a><br /></td></tr>
<tr class="separator:ac18fe030885b2ed3dfa290d8eec8c501"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95cb615ec74460c88b6fe5a605fb18a8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a95cb615ec74460c88b6fe5a605fb18a8">set_raw_num</a> (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a> num)</td></tr>
<tr class="memdesc:a95cb615ec74460c88b6fe5a605fb18a8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the raw sequence number.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a95cb615ec74460c88b6fe5a605fb18a8">More...</a><br /></td></tr>
<tr class="separator:a95cb615ec74460c88b6fe5a605fb18a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77ce8cf348e93caa8bb03f22f7b7d120"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120">set_metadata</a> (char num_line_id=0, const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;zero_point=<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a>(), <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> multiple_size=0)</td></tr>
<tr class="memdesc:a77ce8cf348e93caa8bb03f22f7b7d120"><td class="mdescLeft">&#160;</td><td class="mdescRight">Updates the full set of metadata (used at least for convenient convention-based logging but not actual algorihtms) for this number.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120">More...</a><br /></td></tr>
<tr class="separator:a77ce8cf348e93caa8bb03f22f7b7d120"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:ac6e88639a0c1b5a1da2bf5b7f203b38c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ac6e88639a0c1b5a1da2bf5b7f203b38c">m_num</a></td></tr>
<tr class="memdesc:ac6e88639a0c1b5a1da2bf5b7f203b38c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The raw sequence number. This is the only datum used in algorithms. The others are only for logging and similar.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ac6e88639a0c1b5a1da2bf5b7f203b38c">More...</a><br /></td></tr>
<tr class="separator:ac6e88639a0c1b5a1da2bf5b7f203b38c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae457e665c370f16e9196b1a88010dcbb"><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ae457e665c370f16e9196b1a88010dcbb">m_num_line_id</a></td></tr>
<tr class="memdesc:ae457e665c370f16e9196b1a88010dcbb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identifies the owner number line; <code>char(0)</code> = unknown/none. See <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#ae457e665c370f16e9196b1a88010dcbb">More...</a><br /></td></tr>
<tr class="separator:ae457e665c370f16e9196b1a88010dcbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adcd83d66fac1a77d9e94f13d1c4671b0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#adcd83d66fac1a77d9e94f13d1c4671b0">m_zero_point_num</a></td></tr>
<tr class="memdesc:adcd83d66fac1a77d9e94f13d1c4671b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Value for <code>m_num</code> such that the magnitude is zero. See <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#adcd83d66fac1a77d9e94f13d1c4671b0">More...</a><br /></td></tr>
<tr class="separator:adcd83d66fac1a77d9e94f13d1c4671b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18436b6983e89f83d139e6c94dbd1e19"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a18436b6983e89f83d139e6c94dbd1e19">m_multiple_size</a></td></tr>
<tr class="memdesc:a18436b6983e89f83d139e6c94dbd1e19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Expected size of a full contiguous "block" of these numbers; 0 = unknown/blocks not expected. See <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a18436b6983e89f83d139e6c94dbd1e19">More...</a><br /></td></tr>
<tr class="separator:a18436b6983e89f83d139e6c94dbd1e19"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a1883ad1ea308ad6fe72f75b45b5d32e8"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a1883ad1ea308ad6fe72f75b45b5d32e8">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;seq_num)</td></tr>
<tr class="memdesc:a1883ad1ea308ad6fe72f75b45b5d32e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints given sequence number to given <code>ostream</code>.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a1883ad1ea308ad6fe72f75b45b5d32e8">More...</a><br /></td></tr>
<tr class="separator:a1883ad1ea308ad6fe72f75b45b5d32e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:a8ff266d6afa275d3332d99487b77394b"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a8ff266d6afa275d3332d99487b77394b">hash_value</a> (const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;seq_num)</td></tr>
<tr class="memdesc:a8ff266d6afa275d3332d99487b77394b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Free function that returns <code>seq_num.hash()</code>; has to be a free function named <code>hash_value</code> for boost.hash to pick it up.  <a href="classflow_1_1net__flow_1_1Sequence__number.html#a8ff266d6afa275d3332d99487b77394b">More...</a><br /></td></tr>
<tr class="separator:a8ff266d6afa275d3332d99487b77394b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >An internal <code><a class="el" href="namespaceflow_1_1net__flow.html" title="Flow module containing the API and implementation of the Flow network protocol, a TCP-inspired stream...">net_flow</a></code> sequence number identifying a piece of data. </p>
<p >While it would not be hard to just deal with raw sequence numbers everywhere, it seemed prudent to wrap the raw number in a light-weight object in order to make the interface abstract and be able to change the implementation later. For example, we may change the size of the number and how wrapping works (and even whether there is wrapping), at which point we'd rather only change this class's internals as opposed to code all over the place. For example, <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a3273e706e3184fd8647d7a8ed77b3a2b" title="Returns new sequence number that is *this advanced (or reversed) by the given distance.">operator+()</a> may change from not worrying about wrapping to worrying about it (and similarly for <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a3ffb36c06efb99de2c36c69678b51acb" title="Returns the distance from *this to rhs.">operator-()</a>).</p>
<p >The companion nested class <a class="el" href="classflow_1_1net__flow_1_1Sequence__number_1_1Generator.html" title="An object of this type generates a series of initial sequence numbers (ISN) that are meant to be suff...">Generator</a> is used to generate the initial sequence number (ISN) for a connection.</p>
<p >What does one <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> represent? A byte or a packet? This class is intentionally ignorant of this. It just deals with a number on the number line. The user of the class is responsible for such matters.</p>
<h3>Metadata</h3>
<p >Sequence numbers being used for a given purpose always have certain features to make them useful. The following is a (n arguably overfly formal and detailed) discussion of those features and how we support them via "metadata."</p>
<ul>
<li>Each sequence number line has a "zero" point Z, which is a sequence number such that it is more useful to specify a given absolute sequence number as (S - Z) with the corresponding explicit sign. So S = Z is written as =0, S &gt; Z (most typical) is +M, S &lt; Z (typically invalid) is -M, where M means magnitude, with M &gt; 0.</li>
<li>Sometimes, in particular when individual sequence numbers represent individual sequential bytes in non-stop traffic (i.e., where user has more bytes than bandwidth can pass at any time, so there are always more bytes), and when the traffic is packetized into blocks of size B, it is convenient to specify the magnitude M as a multiple of B. This can be written as xNR &ndash; or just xN when R = 0 &ndash; where N = M / B, R = M % B. If one chooses zero point Z just right (so that S = 0 represents the very first byte in the entire sequence), and there is so much traffic that there are no incomplete packets (i.e., of length &lt; B) formed, then edge sequence numbers and packet (and multi-packet) ranges become extremely simple, small, convenient.</li>
<li>Consider Flow DATA/ACK sequence numbers in particular. The ISN is the value Si chosen for SYN message; therefore the very first byte has absolute number (Si + 1). So let's set Z = (Si + 1). If only full packets are ever sent (which would be true if the Send buffer is always kept full by user, i.e., pipe &lt; user data supply, quite typical in test applications), then every single packet will have sequence number range [+x<code>N</code>, +x<code>(N + 1)</code>) (where <code>N</code> &gt;= 0); and every single contiguous-packet range of I = 1 or more packets will thus have form [+x<code>N</code>, +x<code>(N + I)</code>). Of course, B = max-block-size.<ul>
<li>If one were to use absolute numbers instead, they would be incredibly far from zero and also multiples of many bytes (often that number, B, being something annoying like 8192 or even some odd number). That's a far cry from literally 0, 1, 2, ... (with remainder kicking in, if an incomplete packet of DATA is generated for some reason).</li>
<li>CAUTION! It's tempting &ndash; for this particular application (or in TCP sequence numbers, as well) &ndash; to set Z = ISN. However, the ISN, by convention, equals <em>1 less</em> than the first actual DATA byte's sequence number. Always remember to set Z = ISN + 1 &ndash; <em>even inside the ISN itself</em>!</li>
</ul>
</li>
<li>Every sequence number line has some qualitative purpose; e.g., "Remote DATA-received sequence numbers" or "Local ACK-received sequence numbers." This can be identified by a single letter prefix places in front of a number on the line. E.g., a full number might look like: L-x23%1, which means S = Z - (23 x B + 1). The prefix is called "number line ID."<ul>
<li>Note that Z and B themselves are hidden. If computing S is ever necessary, one might have to hunt for it (or Z, B) in prior logs. This is a cost that would be paid for the conciseness of L+x2 (for example) instead of 1285561384998534.</li>
</ul>
</li>
</ul>
<p ><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> has optional support for the above conventions. While <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ac6e88639a0c1b5a1da2bf5b7f203b38c" title="The raw sequence number. This is the only datum used in algorithms. The others are only for logging a...">m_num</a> stores the basic absolute value S, we also store the following, called <em>metadata</em>:</p>
<ul>
<li>Zero point, Z (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#adcd83d66fac1a77d9e94f13d1c4671b0" title="Value for m_num such that the magnitude is zero. See set_metadata().">m_zero_point_num</a>).<ul>
<li>Z = 0 = default, is allowed.<ul>
<li>However, by convention sign will be omitted from <code>ostream</code>-serialization &ndash; since raw number is unsigned, and no non-zero numbers less than 0 exist.</li>
<li>Recall, also, that S = 0 itself is reserved/illegal by convention.</li>
</ul>
</li>
</ul>
</li>
<li>Multiple size, B (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a18436b6983e89f83d139e6c94dbd1e19" title="Expected size of a full contiguous &quot;block&quot; of these numbers; 0 = unknown/blocks not expected....">m_multiple_size</a>)<ul>
<li>0 = default, "none chosen".<ul>
<li><code>ostream</code>-serialization will avoid mentioning multiples/remainders.</li>
</ul>
</li>
</ul>
</li>
<li>Number line ID (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ae457e665c370f16e9196b1a88010dcbb" title="Identifies the owner number line; char(0) = unknown/none. See set_metadata().">m_num_line_id</a>).<ul>
<li><code>char(0)</code> = default, "none chosen".<ul>
<li><code>ostream</code>-serialization will simply feature no prefix.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p >Use <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a> to set the full set of metadata. For maximum effectiveness, consider these tips &ndash; especially vis-a-vis DATA/ACK-pertinent sequence numbers.</p>
<ul>
<li>Consider not calling <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a> on an incoming packet's various sequence number members until it has been logged (if appropriate) once. Thus the raw number is available <em>if</em> necessary (hopefully never).</li>
<li>Remember that, by Flow-protocol (and, arguably, TCP) convention, Z = ISN + 1. Z =/= ISN. See above for details.<ul>
<li>Even for the <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> storing the ISN; actually, <em>especially</em> that one (see below re. copying)!</li>
</ul>
</li>
<li>Importantly, every copy (<code><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#aad867d849f5c76125dc9ea1abb649c15" title="Copy operator.">operator=()</a></code>, copy constructor), including many implicit invocations thereof (<code><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a3273e706e3184fd8647d7a8ed77b3a2b" title="Returns new sequence number that is *this advanced (or reversed) by the given distance.">operator+()</a></code>, associative storage, etc.), will always copy the metadata too. Be sure to rely on this strongly! If you set an ISN with its Z = ISN + 1 and B = socket's max-block-size; and then all other <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> objects are copies (direct or otherwise) thereof, then they should have the proper metadata and will be beautifully logged as a result. So just set the induction base and let the machinery work.</li>
<li>Metadata are not the actual data (<a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ac6e88639a0c1b5a1da2bf5b7f203b38c" title="The raw sequence number. This is the only datum used in algorithms. The others are only for logging a...">m_num</a> = actual data) and absolutely do not participate in any comparison, arithmetic, or hash operations (which means they're also 100% ignored in associative lookups). So algorithms will work even if there's some bug with metadata.</li>
</ul>
<h3>Thread safety</h3>
<p >Equally thread-safe as built-in types (not safe to read/write or write/write one object simultaneously).</p>
<h2>Implementation notes </h2>
<p ><a class="el" href="classflow_1_1net__flow_1_1Sequence__number_1_1Generator.html" title="An object of this type generates a series of initial sequence numbers (ISN) that are meant to be suff...">Generator</a> and <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> work based on the same assumptions (like the structure of the sequence number space), and thus their implementations may be related. So if one is changed the other may also need to be changed (internally). </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00125">125</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="ab83e641aa9497115f6dbaf76b92f73c6" name="ab83e641aa9497115f6dbaf76b92f73c6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab83e641aa9497115f6dbaf76b92f73c6">&#9670;&nbsp;</a></span>seq_num_delta_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">flow::net_flow::Sequence_number::seq_num_delta_t</a> =  int64_t</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Integer type used to express differences (distances) between Sequence_numbers. </p>
<dl class="section note"><dt>Note</dt><dd>This type can overflow for extremely large sequence number differences (those spanning over half of the range). This should not usually be a concern in practice.</dd></dl>
<dl class="todo"><dt><b><a class="el" href="todo.html#_todo000072">Todo:</a></b></dt><dd>Allowing overflow by using this definition of <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6" title="Integer type used to express differences (distances) between Sequence_numbers.">seq_num_delta_t</a> is somewhat unlike the rest of the implementation of <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> which avoids overflow like the plague. Should we do something like use <code>double</code> or a big-integer type from boost.multiprecision? </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00150">150</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>

</div>
</div>
<a id="ab307e12c0cf8cefbe7fb1ec8588af2a8" name="ab307e12c0cf8cefbe7fb1ec8588af2a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab307e12c0cf8cefbe7fb1ec8588af2a8">&#9670;&nbsp;</a></span>seq_num_t</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">flow::net_flow::Sequence_number::seq_num_t</a> =  uint64_t</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Raw sequence number type. </p>
<p >64 bits used because sequence number wrap-around would take many centuries at high network speeds to occur if the initial sequence number is picked to be sufficiently small. See also <a class="el" href="classflow_1_1net__flow_1_1Sequence__number_1_1Generator.html#a94493589766b7ae9340a31807bdf4710" title="The maximum allowed value for the initial sequence number (ISN) for a given Flow-protocol connection ...">Generator::S_MAX_INIT_SEQ_NUM</a>. </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00138">138</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="ad86f280e517a60ebbe1edfeac7263d6e" name="ad86f280e517a60ebbe1edfeac7263d6e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad86f280e517a60ebbe1edfeac7263d6e">&#9670;&nbsp;</a></span>Sequence_number() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::net_flow::Sequence_number::Sequence_number </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs sequence number that is zero (not a valid sequence number; less than all others). </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00096">96</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00129">operator+()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_ad86f280e517a60ebbe1edfeac7263d6e_icgraph.svg" width="606" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="ad42584bd93111318e71d75d2898e0d72" name="ad42584bd93111318e71d75d2898e0d72"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad42584bd93111318e71d75d2898e0d72">&#9670;&nbsp;</a></span>Sequence_number() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::net_flow::Sequence_number::Sequence_number </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>source</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Copy constructor. </p>
<p >Identical to calling: <code>operator=(source);</code>.</p>
<p >Implementation detail: Default implementation used. This is basically here for documentation purposes.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">source</td><td>Source object. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a934068f778e1809e4aff773c7e7d5297" name="a934068f778e1809e4aff773c7e7d5297"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a934068f778e1809e4aff773c7e7d5297">&#9670;&nbsp;</a></span>hash()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">size_t flow::net_flow::Sequence_number::hash </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Hash value of this <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> for <code>unordered_*&lt;&gt;</code>. </p>
<dl class="section return"><dt>Returns</dt><dd>Ditto. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00252">252</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8cpp_source.html#l00275">hash_value()</a>, <a class="el" href="seq__num_8cpp_source.html#l00275">flow::net_flow::hash_value()</a>, and <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00275">hash_value()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a934068f778e1809e4aff773c7e7d5297_cgraph.svg" width="379" height="107"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a934068f778e1809e4aff773c7e7d5297_icgraph.svg" width="379" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="af4a83d85ed26f8d0e0c81375d5505258" name="af4a83d85ed26f8d0e0c81375d5505258"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af4a83d85ed26f8d0e0c81375d5505258">&#9670;&nbsp;</a></span>operator!=()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::operator!= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return <code>!(*this == rhs)</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00144">144</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

</div>
</div>
<a id="a3273e706e3184fd8647d7a8ed77b3a2b" name="a3273e706e3184fd8647d7a8ed77b3a2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3273e706e3184fd8647d7a8ed77b3a2b">&#9670;&nbsp;</a></span>operator+()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> flow::net_flow::Sequence_number::operator+ </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td>
          <td class="paramname"><em>delta</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns new sequence number that is <code>*this</code> advanced (or reversed) by the given distance. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">delta</td><td>How much to advance (or reverse, if negative) the result. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00129">129</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8cpp_source.html#l00096">Sequence_number()</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00134">operator-()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a3273e706e3184fd8647d7a8ed77b3a2b_cgraph.svg" width="398" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a3273e706e3184fd8647d7a8ed77b3a2b_icgraph.svg" width="379" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a88c07f9b2c18c962b68a3886e2f005f5" name="a88c07f9b2c18c962b68a3886e2f005f5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88c07f9b2c18c962b68a3886e2f005f5">&#9670;&nbsp;</a></span>operator+=()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp; flow::net_flow::Sequence_number::operator+= </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td>
          <td class="paramname"><em>delta</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Advances (or reverses) this sequence number by the given distance. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">delta</td><td>How much to advance (or reverse, if negative) <code>*this</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00118">118</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00124">operator-=()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a88c07f9b2c18c962b68a3886e2f005f5_icgraph.svg" width="379" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a3ffb36c06efb99de2c36c69678b51acb" name="a3ffb36c06efb99de2c36c69678b51acb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3ffb36c06efb99de2c36c69678b51acb">&#9670;&nbsp;</a></span>operator-() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">Sequence_number::seq_num_delta_t</a> flow::net_flow::Sequence_number::operator- </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns the distance from <code>*this</code> to <code>rhs</code>. </p>
<p >This may be negative, meaning <code>rhs &gt; *this</code>.</p>
<dl class="section note"><dt>Note</dt><dd>This will overflow if the difference is extremely large (over half of the sequence number range). This should not usually be a concern in practice... but see to-do on <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6" title="Integer type used to express differences (distances) between Sequence_numbers.">seq_num_delta_t</a>. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00111">111</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

</div>
</div>
<a id="a0fa5305610db905ff775abdf6c148b62" name="a0fa5305610db905ff775abdf6c148b62"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0fa5305610db905ff775abdf6c148b62">&#9670;&nbsp;</a></span>operator-() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> flow::net_flow::Sequence_number::operator- </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td>
          <td class="paramname"><em>delta</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to <code>operator+(-delta)</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">delta</td><td>How much to reverse (or advance, if negative) the result. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00134">134</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8cpp_source.html#l00129">operator+()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a0fa5305610db905ff775abdf6c148b62_cgraph.svg" width="606" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="aab26c0d5ac005a150ec9c31c3d83802c" name="aab26c0d5ac005a150ec9c31c3d83802c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aab26c0d5ac005a150ec9c31c3d83802c">&#9670;&nbsp;</a></span>operator-=()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp; flow::net_flow::Sequence_number::operator-= </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td>
          <td class="paramname"><em>delta</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to: <code>operator+=(-delta)</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">delta</td><td>How much to reverse (or advance, if negative) *this. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>*this. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00124">124</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8cpp_source.html#l00118">operator+=()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_aab26c0d5ac005a150ec9c31c3d83802c_cgraph.svg" width="379" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a40b55e448b1ef23467e9f33b2c62d01f" name="a40b55e448b1ef23467e9f33b2c62d01f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a40b55e448b1ef23467e9f33b2c62d01f">&#9670;&nbsp;</a></span>operator&lt;()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::operator&lt; </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Whether <code>*this</code> is less than <code>rhs</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00149">149</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

</div>
</div>
<a id="a426ba917e01cba32ddad0d8c245a731b" name="a426ba917e01cba32ddad0d8c245a731b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a426ba917e01cba32ddad0d8c245a731b">&#9670;&nbsp;</a></span>operator&lt;=()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::operator&lt;= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return <code>!(*this &gt; rhs)</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00164">164</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

</div>
</div>
<a id="aad867d849f5c76125dc9ea1abb649c15" name="aad867d849f5c76125dc9ea1abb649c15"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad867d849f5c76125dc9ea1abb649c15">&#9670;&nbsp;</a></span>operator=()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp; flow::net_flow::Sequence_number::operator= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>source</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Copy operator. </p>
<p >Copies both the data (the essential absolute value) and all the metadata.</p>
<p >Implementation detail: Default implementation used. This is basically here for documentation purposes.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">source</td><td>Source object. <code>*this</code> is allowed but pointless. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>*this</code>. </dd></dl>

</div>
</div>
<a id="a24819702817b8730ec27a39675768d55" name="a24819702817b8730ec27a39675768d55"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a24819702817b8730ec27a39675768d55">&#9670;&nbsp;</a></span>operator==()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::operator== </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Whether <code>*this</code> is the same sequence number as <code>rhs</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00139">139</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

</div>
</div>
<a id="ae5ee8f6f299fbc5e578bcfd337bf520b" name="ae5ee8f6f299fbc5e578bcfd337bf520b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae5ee8f6f299fbc5e578bcfd337bf520b">&#9670;&nbsp;</a></span>operator&gt;()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::operator&gt; </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return <code>rhs &lt; *this</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00154">154</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

</div>
</div>
<a id="af5b74ff5645f0bf49d0e20773fa5dca7" name="af5b74ff5645f0bf49d0e20773fa5dca7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af5b74ff5645f0bf49d0e20773fa5dca7">&#9670;&nbsp;</a></span>operator&gt;=()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::operator&gt;= </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>rhs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Return <code>rhs &lt;= *this</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">rhs</td><td>Object to compare. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00159">159</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

</div>
</div>
<a id="ac18fe030885b2ed3dfa290d8eec8c501" name="ac18fe030885b2ed3dfa290d8eec8c501"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac18fe030885b2ed3dfa290d8eec8c501">&#9670;&nbsp;</a></span>raw_num_ref()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">Sequence_number::seq_num_t</a> &amp; flow::net_flow::Sequence_number::raw_num_ref </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Provides the raw sequence number. </p>
<p >This method is primarily intended for serialization.</p>
<dl class="section return"><dt>Returns</dt><dd>The raw sequence number. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00258">258</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

</div>
</div>
<a id="a77ce8cf348e93caa8bb03f22f7b7d120" name="a77ce8cf348e93caa8bb03f22f7b7d120"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77ce8cf348e93caa8bb03f22f7b7d120">&#9670;&nbsp;</a></span>set_metadata()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Sequence_number::set_metadata </td>
          <td>(</td>
          <td class="paramtype">char&#160;</td>
          <td class="paramname"><em>num_line_id</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>zero_point</em> = <code><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a>()</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a>&#160;</td>
          <td class="paramname"><em>multiple_size</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Updates the full set of metadata (used at least for convenient convention-based logging but not actual algorihtms) for this number. </p>
<p >See class <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> doc header for important tips and even more detail before using this surprisingly powerful utility. It's all quite intuitive, but there are various nuances one might not expect.</p>
<dl class="section note"><dt>Note</dt><dd>Metadata propagate via copy (copy construction, <code><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#aad867d849f5c76125dc9ea1abb649c15" title="Copy operator.">operator=()</a></code>, and many implicit calls thereto), so it is important to call this method with final values before the propagating begins. See class <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> doc header for discussion. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">num_line_id</td><td>A 1-character descriptive identifier (conventionally, an upper-case letter such as L for Local) for the number line of which this <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> is a part. <code>char(0)</code> means "none" or "unknown" and is default at construction. </td></tr>
    <tr><td class="paramname">zero_point</td><td>The <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> <code>Z</code> such that the relative sequence number is expressed depending on <code>this-&gt;m_num</code> versus <code>Z.m_num</code>; its sign is +, -, or = if the latter is less than, greater than, or equal to the former, respectively; its magnitude is the absolute value of their difference. 0 is legal, but see class <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> for nuance(s). 0 is default at construction. </td></tr>
    <tr><td class="paramname">multiple_size</td><td>The block size, or multiple size, which is a positive value given when data are generally expected to be segmented in whole multiples of this many contiguous Sequence_numbers. 0 means "data are not expected to
       be such multiples" or "unknown"; this is the default at construction. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00268">268</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00356">m_multiple_size</a>, <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>, <a class="el" href="seq__num_8hpp_source.html#l00350">m_num_line_id</a>, and <a class="el" href="seq__num_8hpp_source.html#l00353">m_zero_point_num</a>.</p>

<p class="reference">Referenced by <a class="el" href="peer__socket_8cpp_source.html#l03957">flow::net_flow::Node::connect_worker()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00512">flow::net_flow::Syn_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00564">flow::net_flow::Syn_ack_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00654">flow::net_flow::Data_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00784">flow::net_flow::Ack_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, and <a class="el" href="server__socket_8cpp_source.html#l00430">flow::net_flow::Node::handle_syn_to_listening_server()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a77ce8cf348e93caa8bb03f22f7b7d120_icgraph.svg" width="959" height="456"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a95cb615ec74460c88b6fe5a605fb18a8" name="a95cb615ec74460c88b6fe5a605fb18a8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95cb615ec74460c88b6fe5a605fb18a8">&#9670;&nbsp;</a></span>set_raw_num()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::Sequence_number::set_raw_num </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a>&#160;</td>
          <td class="paramname"><em>num</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Sets the raw sequence number. </p>
<p >This method is primarily intended for deserialization.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">num</td><td>The raw sequence number. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00263">263</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

<p class="reference">Referenced by <a class="el" href="low__lvl__packet_8cpp_source.html#l00512">flow::net_flow::Syn_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00564">flow::net_flow::Syn_ack_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, <a class="el" href="low__lvl__packet_8cpp_source.html#l00654">flow::net_flow::Data_packet::deserialize_type_specific_data_from_raw_data_packet()</a>, and <a class="el" href="low__lvl__packet_8cpp_source.html#l00784">flow::net_flow::Ack_packet::deserialize_type_specific_data_from_raw_data_packet()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a95cb615ec74460c88b6fe5a605fb18a8_icgraph.svg" width="378" height="323"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a1d555c4d74ef4d87f91c8ce51ec47a6b" name="a1d555c4d74ef4d87f91c8ce51ec47a6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1d555c4d74ef4d87f91c8ce51ec47a6b">&#9670;&nbsp;</a></span>valid()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classbool.html">bool</a> flow::net_flow::Sequence_number::valid </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Returns true if and only if <code>*this != <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ad86f280e517a60ebbe1edfeac7263d6e" title="Constructs sequence number that is zero (not a valid sequence number; less than all others).">Sequence_number()</a></code> (i.e., is non-zero). </p>
<dl class="section return"><dt>Returns</dt><dd>Ditto. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00106">106</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8hpp_source.html#l00347">m_num</a>.</p>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="a8ff266d6afa275d3332d99487b77394b" name="a8ff266d6afa275d3332d99487b77394b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ff266d6afa275d3332d99487b77394b">&#9670;&nbsp;</a></span>hash_value()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t hash_value </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>seq_num</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Free function that returns <code>seq_num.hash()</code>; has to be a free function named <code>hash_value</code> for boost.hash to pick it up. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">seq_num</td><td>Object to hash. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>seq_num.hash()</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00275">275</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

<p class="reference">References <a class="el" href="seq__num_8cpp_source.html#l00252">hash()</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00252">hash()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a8ff266d6afa275d3332d99487b77394b_cgraph.svg" width="559" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1Sequence__number_a8ff266d6afa275d3332d99487b77394b_icgraph.svg" width="379" height="47"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a1883ad1ea308ad6fe72f75b45b5d32e8" name="a1883ad1ea308ad6fe72f75b45b5d32e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1883ad1ea308ad6fe72f75b45b5d32e8">&#9670;&nbsp;</a></span>operator&lt;&lt;</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html">Sequence_number</a> &amp;&#160;</td>
          <td class="paramname"><em>seq_num</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints given sequence number to given <code>ostream</code>. </p>
<p ><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>'s effects are felt here; see <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html" title="An internal net_flow sequence number identifying a piece of data.">Sequence_number</a> class doc header for details.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to print. </td></tr>
    <tr><td class="paramname">seq_num</td><td>Object to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="seq__num_8cpp_source.html#l00169">169</a> of file <a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="a18436b6983e89f83d139e6c94dbd1e19" name="a18436b6983e89f83d139e6c94dbd1e19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18436b6983e89f83d139e6c94dbd1e19">&#9670;&nbsp;</a></span>m_multiple_size</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab83e641aa9497115f6dbaf76b92f73c6">seq_num_delta_t</a> flow::net_flow::Sequence_number::m_multiple_size</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Expected size of a full contiguous "block" of these numbers; 0 = unknown/blocks not expected. See <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>. </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00356">356</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00268">set_metadata()</a>.</p>

</div>
</div>
<a id="ac6e88639a0c1b5a1da2bf5b7f203b38c" name="ac6e88639a0c1b5a1da2bf5b7f203b38c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac6e88639a0c1b5a1da2bf5b7f203b38c">&#9670;&nbsp;</a></span>m_num</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a> flow::net_flow::Sequence_number::m_num</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The raw sequence number. This is the only datum used in algorithms. The others are only for logging and similar. </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00347">347</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00252">hash()</a>, <a class="el" href="seq__num_8cpp_source.html#l00118">operator+=()</a>, <a class="el" href="seq__num_8cpp_source.html#l00111">operator-()</a>, <a class="el" href="seq__num_8cpp_source.html#l00149">operator&lt;()</a>, <a class="el" href="seq__num_8cpp_source.html#l00139">operator==()</a>, <a class="el" href="seq__num_8cpp_source.html#l00258">raw_num_ref()</a>, <a class="el" href="seq__num_8cpp_source.html#l00268">set_metadata()</a>, <a class="el" href="seq__num_8cpp_source.html#l00263">set_raw_num()</a>, and <a class="el" href="seq__num_8cpp_source.html#l00106">valid()</a>.</p>

</div>
</div>
<a id="ae457e665c370f16e9196b1a88010dcbb" name="ae457e665c370f16e9196b1a88010dcbb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae457e665c370f16e9196b1a88010dcbb">&#9670;&nbsp;</a></span>m_num_line_id</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">char flow::net_flow::Sequence_number::m_num_line_id</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Identifies the owner number line; <code>char(0)</code> = unknown/none. See <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>. </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00350">350</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00268">set_metadata()</a>.</p>

</div>
</div>
<a id="adcd83d66fac1a77d9e94f13d1c4671b0" name="adcd83d66fac1a77d9e94f13d1c4671b0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adcd83d66fac1a77d9e94f13d1c4671b0">&#9670;&nbsp;</a></span>m_zero_point_num</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#ab307e12c0cf8cefbe7fb1ec8588af2a8">seq_num_t</a> flow::net_flow::Sequence_number::m_zero_point_num</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Value for <code>m_num</code> such that the magnitude is zero. See <a class="el" href="classflow_1_1net__flow_1_1Sequence__number.html#a77ce8cf348e93caa8bb03f22f7b7d120" title="Updates the full set of metadata (used at least for convenient convention-based logging but not actua...">set_metadata()</a>. </p>

<p class="definition">Definition at line <a class="el" href="seq__num_8hpp_source.html#l00353">353</a> of file <a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="seq__num_8cpp_source.html#l00268">set_metadata()</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>net_flow/detail/<a class="el" href="seq__num_8hpp_source.html">seq_num.hpp</a></li>
<li>net_flow/detail/<a class="el" href="detail_2net__flow__fwd_8hpp_source.html">net_flow_fwd.hpp</a></li>
<li>net_flow/detail/<a class="el" href="seq__num_8cpp_source.html">seq_num.cpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:36 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
